iT邦幫忙

2023 iThome 鐵人賽

DAY 11
0

如果 Espian(竊聽者) 獲得了有關 Asja 和 Balvis 產生的密鑰的一些資訊怎麼辦?所以,現在 Asja 和 Balvis 不想直接使用這個金鑰來加密他們的秘密訊息,而是想從他們的預共享金鑰中提取隨機的𝑥

如果竊聽者 Espian 是被動的,即他只能觀察通訊但不能更改交換的訊息,那麼有一個基於使用隨機提取器(extractor)的解決方案。

基本想法是Asja可以從提取器選擇均勻的種子𝑦並將其發送給 Balvis。他們倆都會計算密鑰 𝑘=𝐸𝑥𝑡(𝑥,𝑦),k將接近於均勻隨機並且獨立於𝑦(由於提取器的屬性)。使用經過量子證明的提取器足以防止對手持有有關其密鑰的量子資訊。

提取器 Von Neumann Extractor

Von Neumann Extractor運作在Bernoulli位元序列
Bernoulli位元序列的一個每個位元都獨立,且1和0發生的機率分別為p和1-p
如果p=0.5,這個序列會是均勻的
https://ithelp.ithome.com.tw/upload/images/20230926/20137394DOD66STVDP.png
提取器運作如下:
1.讀取{x,y}值
2.如果讀到00或是11,重回第一步
3.如果讀到01,回傳0
4.如果讀到10,回傳1

如果是一個強大的提取器會滿足以下性質:
即使種子(seed)公開,提取的隨機性仍然接近均勻分佈。這使得可以重複使用種子並保證提取器在密碼學中使用時的安全性。

Hashing-based extractor

雜湊(hash)是一種單向函數 𝐻()對任意長度的訊息進行操作 𝑀並傳回一個固定長度的哈希值 ℎ
𝐻( 𝑀) = ℎ
Hash滿足以下條件

  1. 給定 𝑀,很容易計算 ℎ
  2. 給定 ℎ,很難計算 𝑀
  3. 給定 𝑀,很難找到另一則訊息, 𝑀′,使得 𝐻( 𝑀) = 𝐻(𝑀′)

簡單實作如下:

import hashlib 

message = "QWorldAssociation" # initializing string to encrypt
result = hashlib.sha256(message.encode()) # encoding using sha256

print("SHA256 is:", result.hexdigest()) # printing result in hexadecimal

Salting Hashes

哈希的另一個屬性是,給定相同的輸入,它們總是給出相同的輸出。這會是一個問題,因為如果兩個用戶具有相同的哈希值,他們將具有相同的資訊字串,並且很容易被猜到。作為解決方案,我們將隨機資料(salt)添加到雜湊函數的輸入中,以確保唯一的輸出,即使初始輸入相同。

import hashlib 

def salting_hash(str, salt):
    input=str+salt
    result=hashlib.sha256(input.encode())
    return result.hexdigest()

a = "QWorldAssociation" # initializing first string to encrypt
b = "Community" #initializing salt

c = "QWorldAssociation" # initializing first string to encrypt
d = "C0mmun1ty" #initializing salt (two different characters)

print("First string SHA256 is:", salting_hash(a,b))
print("Second string SHA256 is:", salting_hash(c,d))

2-universal hash functions

K-universal hash functions使指金鑰是來自k個獨立隨機的變數的hash function

通常來說2-universal hash functions可用於建立經過量子驗證的隨機性提取器。

隨機性提取器(基於 2 個通用雜湊函數)可以描述為一個系統,它採用字串(QKD 金鑰)和鹽(生成器種子),在2 個雜湊函數之間做出決定並使用所選函數進行加密。

注意:鹽(種子)長度應等於字串(QKD 金鑰)大小。

使用隨機性提取器進行隱私放大

隱私放大:

  1. Asja 產生種子(或鹽)——隨機位元序列——長度與其最終密鑰相同,並將其發送給 Balvis。
  2. Asja和Balvis生成了他們的最後一把鑰匙。

實作
我們的 2-universal 隨機性萃取器將附加鹽並使用 SHA256 和 SHA3 256 函數。

  1. 如果最終密鑰的第一位是 0,它將使用 SHA 256 進行加密。
  2. 如果是 1,那麼將使用 SHA3 256。
    注意: hashlib函數使用字串,因此您需要將列表轉換為字串。
#You can use key values from previous notebook too for practice!
remain_key_asja = [0, 1, 1, 0, 0]
remain_key_balvis = [0, 1, 1, 0, 0]

from random import randrange
import hashlib 

#Generating seed (salt)
seed=[]
for i in remain_key_asja:
    a=randrange(2)
    seed.append(a)

#Adding seeds to the keys
remain_key_asja.append(seed)
remain_key_balvis.append(seed)

#Converting lists to strings
str_key_asja = ' '.join([str(elem) for elem in remain_key_asja])
str_key_balvis = ' '.join([str(elem) for elem in remain_key_balvis])

#checking first bit to decide hash function to use
if remain_key_asja[0]==0:
    result=hashlib.sha256(str_key_asja.encode())
    print("Encoded using SHA256:", result.hexdigest())
else:
    result=hashlib.sha3_256(str_key_asja.encode())
    print("Encoded using SHA3 256:", result.hexdigest())
bin(int(result.hexdigest(), 16))[2:]

大家可以實作看看,並搭配昨天的24位元的Sifting, QBER與今天的隱私放大合在一起實作。
參考資料:womanium 教材


上一篇
Day10->Sifting & QBER
下一篇
Day12->BB84 Protocol with noise
系列文
Womanium Global Quantum Project-Quantum Software&Hardware30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言